Opi hallitsemaan Pandas DataFrame -luonti. Tämä opas käsittelee DataFrame-objektien alustamista sanakirjoista, listoista, NumPy-taulukoista ja muusta globaaleille data-ammattilaisille.
Pandas DataFrame -luonti: Syvällinen katsaus tietorakenteiden alustamiseen
Tervetuloa datan manipuloinnin maailmaan Pythonilla! Melkein jokaisen data-analyysitehtävän ytimessä on Pandas-kirjasto, ja sen kulmakivi on DataFrame. Ajattele DataFramea älykkäänä, tehokkaana ja joustavana versiona taulukkolaskentaohjelmasta tai tietokantataulusta, joka elää suoraan Python-ympäristössäsi. Se on ensisijainen työkalu datan puhdistamiseen, muuntamiseen, analysointiin ja visualisointiin. Mutta ennen kuin voit suorittaa mitään tästä datataikuudesta, sinun on ensin hallittava DataFrame-objektin luomisen taito. Tämän perustavanlaatuisen tietorakenteen alustustapa voi määrittää koko analyysisi suunnan.
Tämä kattava opas on suunniteltu globaalille yleisölle, joka koostuu aloittelevista ja jo toimivista data-analyytikoista, tiedemiehistä ja insinööreistä. Tutustumme yleisimpiin ja tehokkaimpiin tapoihin luoda Pandas DataFrame -objekteja tyhjästä. Olipa datasi sanakirjassa, listassa, NumPy-taulukossa tai muussa muodossa, tämä artikkeli antaa sinulle tiedon ja käytännön esimerkit DataFrame-objektien alustamiseen luottavaisesti ja tehokkaasti. Rakennetaan perustamme.
Mikä tarkalleen ottaen on Pandas DataFrame?
Ennen kuin aloitamme rakentamisen, selvitetään, mitä olemme rakentamassa. Pandas DataFrame on kaksiulotteinen, kooltaan muunneltavissa oleva ja mahdollisesti heterogeeninen taulukkomuotoinen tietorakenne. Jaetaan tämä osiin:
- Kaksiulotteinen: Siinä on rivejä ja sarakkeita, aivan kuten taulukkolaskentaohjelmassa.
- Kooltaan muunneltavissa: Voit lisätä tai poistaa rivejä ja sarakkeita DataFrame-objektin luomisen jälkeen.
- Heterogeeninen: Sarakkeilla voi olla erilaisia datatyyppejä. Esimerkiksi yksi sarake voi sisältää lukuja (kokonaislukuja tai liukulukuja), toinen tekstiä (merkkijonoja) ja kolmas päivämääriä tai totuusarvoja (True/False).
DataFrame-objektilla on kolme pääkomponenttia:
- Data: Rakenteen sisältämät todelliset arvot, järjestettyinä riveihin ja sarakkeisiin.
- Indeksi: Rivien tunnisteet. Jos et anna indeksiä, Pandas luo oletusindeksin alkaen 0:sta. Indeksi tarjoaa tehokkaan tavan päästä käsiksi dataan ja kohdistaa sitä.
- Sarakkeet: Sarakkeiden tunnisteet. Nämä ovat ratkaisevan tärkeitä tiettyjen datasarjojen käyttämiseksi DataFrame-objektissa.
Tämän rakenteen ymmärtäminen on avain DataFrame-objektien tehokkaaseen luomiseen ja manipulointiin.
Perusta: Pandasin tuominen
Ensin tärkein. Jotta voit käyttää Pandas-kirjastoa, sinun on tuotava se Python-skriptiisi tai -muistikirjaasi. Maailmanlaajuisesti ammattilaisten noudattama yleisesti hyväksytty käytäntö on tuoda se aliaksella pd. Tämä yksinkertainen alias tekee koodistasi luettavamman ja tiiviimmän.
import pandas as pd
import numpy as np # Usein käytetty Pandasin rinnalla, joten tuomme senkin.
Tällä yhdellä rivillä olet avannut Pandas-kirjaston koko potentiaalin. Siirrytään nyt tämän oppaan ytimeen: DataFrame-objektien luomiseen.
Ydinluontimenetelmät: Yksinkertaisesta monimutkaiseen
pd.DataFrame() -konstruktori on uskomattoman monipuolinen. Se voi hyväksyä monenlaisia syötteitä. Tutustumme nyt tärkeimpiin menetelmiin, siirtyen yleisimmistä erikoistuneempiin tapauksiin.
1. DataFrame-objektin luominen luetteloita tai taulukoita sisältävästä sanakirjasta
Tämä on epäilemättä yleisin ja intuitiivisin tapa luoda DataFrame. Aloitat Python-sanakirjalla, jossa avaimista tulee sarakkeiden nimiä, ja arvoista tulee luetteloita (tai NumPy-taulukoita tai Pandas Series -objekteja), jotka sisältävät kunkin sarakkeen tiedot.
Miten se toimii: Pandas yhdistää kunkin sanakirjan avaimen sarakeotsikkoon ja kunkin arvoluettelon kyseisen sarakkeen riveihin. Kriittinen vaatimus tässä on, että kaikkien luetteloiden on oltava samankokoisia, sillä jokainen luettelo edustaa kokonaista datasarakeketta.
Esimerkki:
Luodaan DataFrame, joka sisältää tietoja eri kaupungeista ympäri maailmaa.
# Data järjestetty sarakkeittain
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Luo DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Tuloste:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 São Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
Keskeinen opetus: Tämä menetelmä on täydellinen, kun datasi on luonnollisesti järjestetty ominaisuuden tai kategorian mukaan. Se on selkeä, luettavissa ja kääntää suoraan sanakirjasi rakenteen taulukkomuotoon.
2. DataFrame-objektin luominen sanakirjojen luettelosta
Vaihtoehtoinen ja yhtä tehokas menetelmä on käyttää luetteloa, jossa jokainen elementti on sanakirja. Tässä rakenteessa jokainen sanakirja edustaa yksittäistä riviä, ja sen avaimet edustavat kyseisen rivin datan sarakeotsikoita.
Miten se toimii: Pandas käy läpi luettelon. Jokaisesta sanakirjasta se luo uuden rivin. Sanakirjan avaimia käytetään sarakkeiden määrittämiseen. Tämä menetelmä on uskomattoman joustava, koska jos sanakirjasta puuttuu avain, Pandas täyttää kyseisen solun vastaavalla rivillä automaattisesti arvolla NaN (Not a Number), joka on Pandasin standardimerkintä puuttuvalle datalle.
Esimerkki:
Esitetään sama kaupunkidata, mutta tällä kertaa järjestettynä tietueiden luetteloksi.
# Data järjestetty rivittäin (tietueittain)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'São Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Huomaa erilainen rakenne
]
# Luo DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Tuloste:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 São Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Huomaa, kuinka Pandas käsitteli epäjohdonmukaisuudet elegantisti. Shanghain 'Is_Coastal' -arvo on NaN, koska se puuttui sen sanakirjasta. Kairolle luotiin uusi 'Timezone'-sarake, jossa NaN kaikissa muissa kaupungeissa. Tämä tekee siitä erinomaisen valinnan työskentelyyn puolirakenteisen datan kanssa, kuten JSON-vastaukset API-rajapinnoista.
Keskeinen opetus: Käytä tätä menetelmää, kun datasi tulee tietueiden tai havaintojen sarjana. Se on vankka puuttuvien tietojen ja tietuarakenteiden vaihteluiden käsittelyssä.
3. DataFrame-objektin luominen NumPy-taulukosta
Tiedonkäsittelyssä, koneoppimisessa tai muilla aloilla, joissa on kyse runsaista numeerisista operaatioista, data on usein peräisin NumPy-taulukoista. Pandas on rakennettu NumPy-kirjaston päälle, mikä tekee näiden kahden välisestä integroinnista saumattoman ja erittäin tehokkaan.
Miten se toimii: Annat kaksiulotteisen NumPy-taulukon pd.DataFrame() -konstruktorille. Oletusarvoisesti Pandas luo kokonaislukupohjaiset indeksit ja sarakkeet. Voit kuitenkin (ja sinun pitäisi) antaa merkityksellisiä tunnisteita käyttämällä index- ja columns-parametreja.
Esimerkki:
Luodaan DataFrame satunnaisesti generoidusta 5x4 NumPy-taulukosta, joka edustaa anturilukemia ajan mittaan.
# Luo 5x4 NumPy-taulukko satunnaisella datalla
data_np = np.random.rand(5, 4)
# Määritä sarake- ja indeksimerkinnät
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# Luo DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Tuloste (satunnaisluvut voivat vaihdella):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
Tässä esimerkissä esittelimme myös tehokkaan ominaisuuden: DatetimeIndex-indeksin käyttämisen aikasarjadataan, mikä avaa laajan valikoiman aikaan perustuvia analyysimahdollisuuksia Pandasissa.
Keskeinen opetus: Tämä on muistitehokkain tapa luoda DataFrame homogeenisesta numeerisesta datasta. Se on standardivalinta rajapintana NumPy-, Scikit-learn- tai TensorFlow-kirjastojen kanssa.
4. DataFrame-objektin luominen luettelojen luettelosta
Tämä menetelmä on käsitteellisesti samankaltainen kuin NumPy-taulukosta luominen, mutta se käyttää standardi-Python-luetteloita. Se on suoraviivainen tapa muuntaa sisäkkäisessä luettelomuodossa tallennettu taulukkomuotoinen data.
Miten se toimii: Annat luettelon, jossa jokainen sisempi luettelo edustaa datatietoriviä. Kuten NumPy-taulukoiden kanssa, on erittäin suositeltavaa määrittää sarakkeiden nimet columns-parametrin kautta selvyyden vuoksi.
Esimerkki:
# Data riviluettelona
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Määritä sarakkeiden nimet
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Luo DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Tuloste:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Keskeinen opetus: Tämä on yksinkertainen ja tehokas menetelmä, kun datasi on jo järjestetty rivien luetteloksi, esimerkiksi kun luet tiedostoformaatista, jossa ei ole otsikoita.
Edistynyt alustus: DataFrame-objektin mukauttaminen
Raakadatan antamisen lisäksi pd.DataFrame() -konstruktori tarjoaa useita parametreja uuden DataFrame-objektin rakenteen ja ominaisuuksien hallintaan sen luomishetkestä lähtien.
Indeksin määrittäminen
Olemme jo nähneet `index`-parametrin toiminnassa. Indeksi on olennainen osa DataFramea, joka tarjoaa tunnisteet riveille, joita käytetään nopeaan hakuun, datan kohdistukseen ja muuhun. Vaikka Pandas tarjoaa oletuksena numeerisen indeksin (0, 1, 2, ...), merkityksellisen indeksin asettaminen voi tehdä datan käsittelystä paljon helpompaa.
Esimerkki: Käytetään uudelleen sanakirja luetteloista -esimerkkiämme, mutta asetetaan `City`-sarake indeksiksi luomisen yhteydessä.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai']
# Luo DataFrame mukautetulla indeksillä
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Tuloste:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
São Paulo Brazil 22.4 False
Mumbai India 20.9 True
Nyt voit käyttää rividataa näiden merkityksellisten tunnisteiden avulla, esimerkiksi komennolla df_with_index.loc['Tokyo'].
Datatyyppien hallinta (`dtype`)
Pandas on melko hyvä päättelemään datatyyppejä (esim. tunnistamaan lukuja, tekstiä ja totuusarvoja). Joskus sinun on kuitenkin pakotettava tietty datatyyppi sarakkeelle muistitehokkuuden varmistamiseksi tai tiettyjen operaatioiden mahdollistamiseksi. `dtype`-parametri antaa sinulle tämän hallinnan.
Esimerkki: Kuvittele, että meillä on tuotetunnuksia, jotka näyttävät luvuilta, mutta joita tulisi käsitellä tekstinä (merkkijonoina).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Luo DataFrame määrittäen 'ProductID'-sarakkeen dtype-tyypiksi
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Tuloste:
ProductID object Stock int32 dtype: object
Huomaa, että `str` Pandasissa edustetaan `object`-tyyppinä. Asettamalla `dtype` eksplisiittisesti estämme Pandas-kirjastoa käsittelemästä `ProductID`-kenttää numerona, mikä voisi johtaa virheellisiin laskutoimituksiin tai lajitteluongelmiin myöhemmin. Tarkempien kokonaislukutyyppien, kuten `int32` oletusarvoisen `int64`-tyypin sijaan, käyttö voi myös säästää merkittävästi muistia suurten datajoukkojen kanssa.
Käytännön skenaariot ja parhaat käytännöt
Oikean luontimenetelmän valinta riippuu datasi alkuperäisestä muodosta. Tässä on yksinkertainen päätösopas:
- Onko datasi sarakkeissa (esim. yksi luettelo ominaisuutta kohti)? Käytä sanakirjaa, joka sisältää luetteloita. Se on luonnollinen valinta.
- Onko datasi tietueiden sarja (esim. JSON-rajapinnasta)? Käytä sanakirjojen luetteloa. Se soveltuu erinomaisesti puuttuvien tai ylimääräisten kenttien käsittelyyn tietueissa.
- Onko datasi numeerista ja ruudukkomuodossa (esim. tieteellisestä laskennasta)? Käytä NumPy-taulukkoa. Se on tehokkain vaihtoehto tähän käyttötapaukseen.
- Onko datasi yksinkertaisessa rivi-riviltä taulukkomuodossa ilman otsikoita? Käytä luettelojen luetteloa ja anna sarakkeiden nimet erikseen.
Yleisiä virheitä vältettävänä
- Eri pituiset luettelot sanakirjassa: Tämä on yleinen virhe. Kun luot DataFramea sanakirjasta, joka sisältää luetteloita, jokaisessa luettelossa on oltava täsmälleen sama määrä elementtejä. Jos ei, Pandas antaa `ValueError`-virheen. Varmista aina, että sarakedatasi on samankokoinen ennen luomista.
- Indeksin jättäminen huomiotta: Oletuksena oleva 0-pohjainen indeksi on monissa tapauksissa kätevä, mutta jos datassasi on luonnollinen tunniste (kuten tuotetunnus, käyttäjätunnus tai tietty aikaleima), sen asettaminen indeksiksi heti alusta alkaen voi yksinkertaistaa koodiasi myöhemmin.
- Datatyyppien unohtaminen: Pandasin antaa päätellä tyypit toimii useimmiten, mutta suurilla datajoukoilla tai sarakkeilla, joissa on sekalaisia tyyppejä, suorituskyky voi heikentyä. Ole ennakoiva asettaessasi `dtype`-tyyppiä sarakkeille, joita on käsiteltävä kategorioina, merkkijonoina tai tiettyinä numeerisina tyyppeinä, muistin säästämiseksi ja virheiden estämiseksi.
Alustusta pidemmälle: DataFrame-objektien luominen tiedostoista
Vaikka tämä opas keskittyy DataFrame-objektien luomiseen muistissa olevista Python-objekteista, on tärkeää tietää, että valtaosassa todellisia skenaarioita datasi tulee ulkoisesta tiedostosta. Pandas tarjoaa joukon erittäin optimoituja lukutoimintoja tähän tarkoitukseen, mukaan lukien:
pd.read_csv(): Pilkuin erotettuja arvoja sisältäville tiedostoille, datan tuonnin työhevonen.pd.read_excel(): Datan lukemiseen Microsoft Excel -taulukkolaskentaohjelmista.pd.read_json(): Datan lukemiseen JSON-tiedostoista tai merkkijonoista.pd.read_sql(): Tietokantakyselyn tulosten lukemiseen suoraan DataFrame-objektiin.pd.read_parquet(): Lukemiseen tehokkaasta, sarakekeskeisestä Parquet-tiedostomuodosta.
Nämä toiminnot ovat seuraava looginen askel Pandas-matkallasi. Niiden hallitseminen antaa sinun ottaa vastaan dataa käytännössä mistä tahansa lähteestä tehokkaaseen DataFrame-rakenteeseen.
Yhteenveto: Perustasi datan hallintaan
Pandas DataFrame on keskeinen tietorakenne kaikessa vakavassa datatyössä Pythonissa. Kuten olemme nähneet, Pandas tarjoaa joustavan ja intuitiivisen työkalusarjan näiden rakenteiden alustamiseen monista eri muodoista. Ymmärtämällä, miten luoda DataFrame sanakirjoista, listoista ja NumPy-taulukoista, olet rakentanut vankan perustan data-analyysiprojekteillesi.
Avain on valita menetelmä, joka vastaa parhaiten datasi alkuperäistä rakennetta. Tämä ei ainoastaan tee koodistasi puhtaampaa ja luettavampaa, vaan myös tehokkaampaa. Tästä eteenpäin olet valmis siirtymään datan puhdistuksen, tutkimuksen, muunnoksen ja visualisoinnin jännittäviin tehtäviin. Hauskoja koodaushetkiä!